[JAVA 2] Java에서의 변수 선언, 형변환

[JAVA 2] Java에서의 변수 선언, 형변환

1. 변수란?


“한개의 값을 저장할 수 있는 메모리 공간”을 의미한다. 여러가지 형태로 값을 저장할 수 있으며 저장하기 이전에 자신이 저장할 값의 타입을 선언해야 한다.
  • 좀 더 쉽게 말하면 어떤 것을 저장할 수 있는 공간이다.
  • 대신 형태가 존재하는데, String, int 등 정해진 형태가 있다. 이해하기 쉽게 설명하면 네모 박스에는 네모를 넣어야 하고, 동그라미 박스에는 동그라미를 넣어야 한다.
 
 

1.1 변수의 선언

변수의 선언
  • int → 자료형 ( 변수가 저장될 타입 )
  • num1 = 변수의 이름
  • 0 = 초기화 된 변수의 값
 
💡
변수를 왜 초기화 해야 할까?
  • 변수를 선언하게 되면 시스템의 메모리 상에 주소 값이 할당되게 된다. 이때 해당 메모리에 어떤 값이 저장되어 있을지 모르기 때문에 초기화 해주어야 한다.
  • 지역 변수의 경우 반드시 초기화를 해주어야 하지만 클래스 타입 변수와 인스턴스 타입 변수는 반드시 초기화를 해줄 필요는 없다.
 
 
변수의 선언 예시
결과
notion image
 
😇 변수의 이름 규정(java)
  • 대 소문자는 구분된다
  • 예약된 문자열은 사용할 수 없다. (print, class, true.. 등등)
  • 변수의 이름은 숫자로 시작할 수 없다.
  • 특수 문자는 두 개만 허용한다 → _ $
 
🙆🏻 변수의 이름 규정 ( JAVA 개발자들의 암묵적인 약속 )
  • 클래스 이름의 첫 글자는 항상 대문자로 한다 ex) class Hello
  • 여러 단어로 이루어진 이름은 단언의 첫 글자를 대문자로 한다. ex) InstanceOf
  • 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 ‘_’ 로 구별한다
ex) P1, MAX_NUMBER = 30
 
두 변수의 값 비교하기
결과
notion image
 
 

1.2 변수의 타입

기본형
  • 논리형(boolean)
  • 문자형(char)
  • 정수형(byte, short, int, long)
  • 실수형(float, double)
💡
실수형의 정밀도 float는 큰 값을 저장할 수 있지만 float의 정밀도는 7자리 이고, double은 15자리이다. 따라서 정확한 값을 저장하고 싶다면 double을 사용하는 것이 좋다.
 
참조형
  • 객체의 주소(4byte)를 저장한다. 8개의 기본형을 제외한 나머지 타입이다.
 
 

1.3 상수와 리터럴

상수?
  • 변수와 같지만, 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다.
  • 변수를 선언하는 법과 같지만 변수의 타입 앞에 final을 붙여주기만 하면 된다.
 
리터럴
→ 헷갈리는 사람이 있을 것 이다. 기존에 자신이 알고 있는 상수는 1,3,4와 같은 ‘수’ 인데 JAVA에서는 상수를 다르게 정의했기 때문이다. 따라서 int a = 30; 이라는 구문에서 30은 상수가 아닌 리터럴 이라고 표기하도록 약속하였다.
💡
상수가 필요한 이유?
  • 상수를 사용하게 되면 계산식과 같은 코드에서 수식이 명확해진다(10*20 → width*height)
  • 코드의 수정이 용이하다.
 
 
리터럴의 타입 (정수형)
 
자료형과 다른 형태의 리터럴을 넣으면 어떻게 될까?
  • 리터럴의 타입은 저장된 변수의 타입과 일치하는 것이 보통이지만 범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용된다. (int < long)
 
 
문자열 리터럴
  • 작은 따옴표( ‘ ) 로 감싼 문자를 ‘문자 리터럴’ 이라고 한다. 만약 문장을 출력하고 싶다면 큰 따옴표( ” )로 묶어 표현한다.
문자열은 변수 선언 시 빈 문자열로 초기화가 가능하지만 문자는 불가능하다.
 
문자열의 덧셈 규칙
  • 문자열은 기본적으로 + 연산을 통해 더할 수 있으며 다른 자료형과 + 연산을 한다면 다른 자료형도 문자열 형태로 형 변환 된다.
 
 
 

1.4 지시자와 Printf() 함수

지시자
  1. 지시자?
  • 일반적으로 사용자로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식.
지시자
설명
%b
boolean 형식으로 출력
%d
10진수 (int) 형식으로 출력
%o
8진수 형식으로 출력
%x
16진수 형식으로 출력
%f
부동 소수점(float) 형식으로 출력
%e
지수 형식으로 출력
%c
문자로 출력
%s
문자열 형태로 출력
%n
줄 바꿈(enter)
 
 
Printf() 함수
  • Println() 함수와 유사해 보이지만 그냥 변수를 출력 하는게 아닌 형식을 지정하여 출력하고자 할 때 사용하는 함수이다.
💡
printf() 함수의 경우 지시자 지정을 해줄 때 해당 지시자와 리터럴의 타입이 맞지 않으면 에러가 발생한다.
 

1.5 입력(Scanner)

Scanner
스캐너 클래스를 사용하여 화면에서 값을 입력 받아 보자
 
 
 
 

2. 형변환(캐스팅)


2.1 형변환?

형 변환이란 변수의 데이터 타입을 다른 데이터 타입으로 변환하는 것을 의미합니다. 이는 데이터 타입에 대한 이해와 관련이 있으며, 변수의 값이나 정확도를 유지하거나 변경할 수 있습니다. 자바에서는 명시적 형 변환과 암시적 형 변환(자동 형변환)이 있으며, 명시적 형 변환은 큰 데이터 타입으로의 변환일 때 사용됩니다
 
형변환 예시
  • (자료형)피연산자 형태로 작성해주면 된다
 
 

2.2 Java 변수 형 변환

형 변환 방법
 
자료형 간 형 변환

자료형 간 형 변환

자바에서는 크기가 작은 자료형에서 큰 자료형으로 형 변환하는 것이 자동으로 이루어집니다. 예를 들어, byte에서 int로의 형 변환은 자동으로 이루어집니다. 그러나 큰 자료형에서 작은 자료형으로 형 변환하려면 명시적으로 형 변환을 해야 합니다. 이때 데이터의 손실이 발생할 수 있으므로 주의해야 합니다.
예를 들어, int 타입의 변수 numbyte 타입으로 형 변환하면 다음과 같이 할 수 있습니다.
위 코드에서 num 변수에는 300이 할당되어 있습니다. 이를 byte 타입으로 형 변환하면 데이터의 손실이 발생합니다. byte 타입은 -128부터 127까지의 값을 표현할 수 있기 때문입니다. 따라서 위 코드에서 출력되는 값은 44가 됩니다.
이처럼 자료형 간의 형 변환은 데이터의 손실이 발생할 수 있으므로, 주의해서 사용해야 합니다.
  • 작은 자료형에서 큰 자료형으로 형 변환은 문제가 되지 않습니다.
  • 큰 자료형에서 작은 자료형으로 변환 하는 건 프로그래머가 의도한 동작임을 명시해야 합니다.
 
자동 형변환 가능 도식화
byte(1byte)
short(2byte)
int(4byte) char(4byte)
long(8byte)
float(4byte)
double(8byte)